{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--2019-04-10 13:01:00--  https://www.dropbox.com/s/w4u9owma52h8t4l/worms_harmonic.t7\n",
      "Resolving www.dropbox.com (www.dropbox.com)... 162.125.70.1, 2620:100:6026:1::a27d:4601\n",
      "Connecting to www.dropbox.com (www.dropbox.com)|162.125.70.1|:443... connected.\n",
      "HTTP request sent, awaiting response... 301 Moved Permanently\n",
      "Location: /s/raw/w4u9owma52h8t4l/worms_harmonic.t7 [following]\n",
      "--2019-04-10 13:01:00--  https://www.dropbox.com/s/raw/w4u9owma52h8t4l/worms_harmonic.t7\n",
      "Reusing existing connection to www.dropbox.com:443.\n",
      "HTTP request sent, awaiting response... 302 Found\n",
      "Location: https://ucbf4859a3b2b7353e8ddae8b22b.dl.dropboxusercontent.com/cd/0/inline/AesOV91Ket-RMHMVzTQ-BUWW-8ZDTUlDC26Px7opb4lPtpPT6h6N5THB-cDitT-4Ea_b_kvK8cqRzIH59qfhvKxFL3PSSRIvqydujgIyOa2ymA/file# [following]\n",
      "--2019-04-10 13:01:01--  https://ucbf4859a3b2b7353e8ddae8b22b.dl.dropboxusercontent.com/cd/0/inline/AesOV91Ket-RMHMVzTQ-BUWW-8ZDTUlDC26Px7opb4lPtpPT6h6N5THB-cDitT-4Ea_b_kvK8cqRzIH59qfhvKxFL3PSSRIvqydujgIyOa2ymA/file\n",
      "Resolving ucbf4859a3b2b7353e8ddae8b22b.dl.dropboxusercontent.com (ucbf4859a3b2b7353e8ddae8b22b.dl.dropboxusercontent.com)... 162.125.70.6, 2620:100:6026:6::a27d:4606\n",
      "Connecting to ucbf4859a3b2b7353e8ddae8b22b.dl.dropboxusercontent.com (ucbf4859a3b2b7353e8ddae8b22b.dl.dropboxusercontent.com)|162.125.70.6|:443... connected.\n",
      "HTTP request sent, awaiting response... 302 FOUND\n",
      "Location: /cd/0/inline2/Aet5aOIVoFEkQmRw38U1tDqRtmxnTKoNPA_fDEPGjpEVsp8R19H_ctWiEJQmoLjBwJlkNuxxk0tvghtKxG3WxHxcCdBtb0JqcEHkY2gq_-pTAS3_G_qAxAk1hhuT9LAKvikJUZj0f44KneB85qu2b8hgqeIlXiBA4yZAZ8QGh4QBrl03wHdNs3FbXYgvoMNYHhIeqd4z44ZqkIHtLS7h-luoUTnZRdSoz2xrWNyl7b8RlbuziEwdr2u__0W9KALTteYgyHoAFO0GUiDCxGiZz2kwXC_U2-If09oW6wY6eh6uv9NV4iUgPwmfQWkcbjZQkUbkakfH4EHYmDfBBMIIywA0/file [following]\n",
      "--2019-04-10 13:01:01--  https://ucbf4859a3b2b7353e8ddae8b22b.dl.dropboxusercontent.com/cd/0/inline2/Aet5aOIVoFEkQmRw38U1tDqRtmxnTKoNPA_fDEPGjpEVsp8R19H_ctWiEJQmoLjBwJlkNuxxk0tvghtKxG3WxHxcCdBtb0JqcEHkY2gq_-pTAS3_G_qAxAk1hhuT9LAKvikJUZj0f44KneB85qu2b8hgqeIlXiBA4yZAZ8QGh4QBrl03wHdNs3FbXYgvoMNYHhIeqd4z44ZqkIHtLS7h-luoUTnZRdSoz2xrWNyl7b8RlbuziEwdr2u__0W9KALTteYgyHoAFO0GUiDCxGiZz2kwXC_U2-If09oW6wY6eh6uv9NV4iUgPwmfQWkcbjZQkUbkakfH4EHYmDfBBMIIywA0/file\n",
      "Reusing existing connection to ucbf4859a3b2b7353e8ddae8b22b.dl.dropboxusercontent.com:443.\n",
      "HTTP request sent, awaiting response... 200 OK\n",
      "Length: 115431143 (110M) [application/octet-stream]\n",
      "Saving to: ‘worms_harmonic.t7’\n",
      "\n",
      "100%[======================================>] 115 431 143 31,8MB/s   in 3,8s   \n",
      "\n",
      "2019-04-10 13:01:06 (28,6 MB/s) - ‘worms_harmonic.t7’ saved [115431143/115431143]\n",
      "\n"
     ]
    }
   ],
   "source": [
    "!wget https://www.dropbox.com/s/w4u9owma52h8t4l/worms_harmonic.t7 -O worms_harmonic.t7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model loaded\n"
     ]
    }
   ],
   "source": [
    "import torch \n",
    "from torchvision import transforms\n",
    "from harmonic import cluster\n",
    "from models import UNet\n",
    "\n",
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "\n",
    "transform = transforms.Compose(\n",
    "    [transforms.CenterCrop(448),        \n",
    "     transforms.ToTensor(),\n",
    "     transforms.Normalize(mean=[0.5, 0.5, 0.5],\n",
    "                          std=[0.5, 0.5, 0.5])])\n",
    "\n",
    "sins = [[-10.27957820892334, 1.3967024087905884, 2.8719606399536133],\n",
    " [-42.62486267089844, 3.611276865005493, 1.9089478254318237],\n",
    " [-33.99772262573242, -0.23299844563007355, -0.5037446618080139],\n",
    " [-18.28744125366211, 4.426985263824463, -0.5736066102981567],\n",
    " [29.773433685302734, -0.08113036304712296, 0.8393508791923523],\n",
    " [-8.268046379089355, 0.033597033470869064, 1.5522394180297852],\n",
    " [0.7675176858901978, -4.629482746124268, 1.9060850143432617],\n",
    " [-0.9893818497657776, 19.173843383789062, -3.758657932281494],\n",
    " [-0.5943151116371155, -36.07362365722656, 1.2640318870544434],\n",
    " [-0.28905314207077026, 2.9335758686065674, 0.2935348451137543],\n",
    " [-0.8447716236114502, -20.75826072692871, -2.8999669551849365],\n",
    " [0.2188388705253601, -24.464981079101562, -0.18283100426197052]]\n",
    "\n",
    "\n",
    "net = torch.nn.DataParallel(UNet(1, sins), [0]).to(device)\n",
    "wdict = torch.load('worms_harmonic.t7')\n",
    "for k in wdict.keys():\n",
    "    if k.endswith('num_batches_tracked'):\n",
    "        wdict.pop(k)\n",
    "net.load_state_dict(wdict)\n",
    "net.eval()\n",
    "print(\"Model loaded\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f974002fed0>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nH6d0HI3BLrz96F6ni3Ybfx3w1Xfl0HVJ7q+1/nmt9W+SvDPJjT23qU03Jrl1cfnWJC/psS0bq7X+\nQZNX+7kAAATRSURBVJIv7Ln6oD7dmOTX63l/lORxpZQrumnpdg7o30FuTPLOWusjtdYHktyf86/n\nQau1PlRr/ePF5b9Kcl+SKzOR43hI/w4yuuO4OBZ/vfj24sVXTfKCJO9aXL/3GC6P7buS3FBKKR01\nd2OH9O8go3qNLpVSrkryo0n+7eL7kokcQ0bDGGwkpj7+SqY/Bpv6+CsxBssE/v+ewxjM+OtwfYdD\nVyb53Mr3D+bwD5ExqUn+Uynlw6WUmxbXPbHW+tDi8l8keWI/TWvUQX2a0rH92UWp5NvLN8rQR9+/\nRWnkD+T8XwUmdxz39C+Z0HFclMOeTvJwkvfl/F/bvlRrPbe4yWo/Hu3j4udfTvKd3bZ4M3v7V2td\nHsM3LI7hW0oplyyuG+UxTPKvkvzzJH+7+P47M6FjyCiM9b2zjjmMwSb3//YBJvN/99LUx1+JMVhG\n/P/3DMZgxl+H6DscmrK/V2t9dpIfSfLqUsrfX/1hrbXm8CR2dKbYpyRvTfKUJCeSPJTkzf02pxml\nlG9LcnuSn6+1fmX1Z1M4jvv0b1LHsdb69VrriSRX5fxf2b6v5yY1am//SinPTPKLOd/P5yS5PMlr\ne2ziTkopP5bk4Vrrh/tuC0zUrMZgU+vPikn9351Mf/yVGION3ZTHYMZfR+s7HDqT5OqV769aXDd6\ntdYzi38fTvI7Of/h8fllqd3i34f7a2FjDurTJI5trfXziw/Jv03ya/lGueto+1dKuTjn/9P+jVrr\nby+unsxx3K9/UzyOSVJr/VKSDyR5Xs6X8h5b/Gi1H4/2cfHz70jylx03dSsr/XvRoly91lofSfLv\nMu5j+INJfryU8umcn8rzgiT/OhM8hgzaGN87a5nJGGwy/28fZGr/d099/JUYgy1+NIn/vyc6BjP+\nOkLf4dDdSZ66WCH8m3N+oad399ymnZVS/k4p5duXl5P8gyT35nzfXrG42SuS/G4/LWzUQX16d5Kf\nWaxi/9wkX14pmx2NPfNmfyLnj2Nyvn8vX6xif02Spya5q+v2bWoxT/ZtSe6rtf7Kyo8mcRwP6t+U\njmMp5btLKY9bXP6WJD+c8/P6P5DkJxc323sMl8f2J/P/t3fHuE3FcByAf53ozIbEUOUAnRgZWMkV\nGHsKVIlb9ARFYuAKkCsApZWKWk7CYAa7aoYkhAjJPL/vkzzkJYN/chT/5Tz7Jav27+R/aUu+27Xi\n+Sh1L/j6GE7mO5okpZS3pZTnpZST1HlvVUp5k0HGkMlQg03bEPP2LoPN3UPXX4kaLAPM36PXYOqv\nPZT+p4UvU0+z/5nkvHd//lGmRerp+9+S3DzkSt2j+DnJXZJPSZ727utf5vqQejvor9T9mGfbMqWe\nWn/RxvV7khe9+39gvsvW/6vUH4hna58/b/l+JHndu/97ZnyZesvyVZKvrS1HGccd+YYZxySnSb60\nLNdJ3rXri9Si6j7JxyRP2vXj9vq+vb/oneHAfKs2htdJ3ufxaRqT+o5uyPsqj0/LGGIMtem0qMG6\n93fPTEPXXzsyjjR3D11//SHjSOOoBhukBov6a2M7asEBAAAAmKHe28oAAAAA6MjiEAAAAMCMWRwC\nAAAAmDGLQwAAAAAzZnEIAAAAYMYsDgEAAADMmMUhAAAAgBmzOAQAAAAwY78BbSChU3NOmfUAAAAA\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f974ab84c90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from PIL import Image\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "img = Image.open(\"images/worms.png\").convert('RGB')\n",
    "#estimate the embeddings\n",
    "x = transform(img)[:1]\n",
    "emb = net(x.unsqueeze(0).to(device)).detach().cpu().numpy()\n",
    "#cluster embeddings space\n",
    "cc = cluster(emb[0],0.5,semantic=x[0].numpy()>0,minimal_area=500)\n",
    "\n",
    "f,ax = plt.subplots(nrows=1,ncols=2,figsize=(20,10))\n",
    "ax[0].imshow(x[0])\n",
    "ax[1].imshow(cc)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
